<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    
    <title>回顾object.defineproperty方法</title>
  
</head>

<body>
   <script type="text/javascript">
    let number = 18
   // 创建一个对象
    let person = {
        name:'南风',
        sex:'女',
       
    }


    /* 
      通过defineProperty（）让变量number和person对象产生了联系，通过defineProperty（）的方式，创建了person对象中的age属性，返回值是number这个变量，从而产生了 联系
      defineProperty（）的方式可以给一个对象追加属性
     */
    /* age这个属性是枚举类型 是不参与遍历的 */
    Object.defineProperty(person,'age',{
        // value:22,
        // enumerable:true, // 控制属性是否可枚举,默认值是false
        // writable:true,  // 控制属性是否可以被修改
        // configurable:true // 控制属性是否可以被删除

        // 当有人读取person的age属性时，get函数(getter)就会被调用，且返回值就是age的值
        // 每一次读取age这个属性都会触发get函数的调用
        get(){
            console.log('有人读取age属性了');
            return number
        },

          // 当有人修改person的age属性时，set函数(setter)就会被调用，且会收到修改的具体值
        set(value){
            console.log('有人修改了age的属性，且值是',value); // 此处并没有真正的修改了number的值，因为number这个变量的值一直没有被改变
            number = value // 将修改的值value重新赋值给了变量number，此时才真正的修改了number变量
        }
    })

    // Object.keys(person) 返回值:返回可枚举的属性数组  将person对象中的属性以字符串数组的形式返回
    //console.log(Object.keys(person));

    console.log(person)
   </script>
</body>

</html>
